package com.rainbow.support.common.annotation.idempotent;

import java.lang.annotation.*;
import java.util.concurrent.TimeUnit;

/**
 * 幂等处理
 * @author 傅为地
 */
@Inherited
@Target(ElementType.METHOD)
@Retention(value = RetentionPolicy.RUNTIME)
public @interface Idempotent {

	/**
	 * </p>
	 * 幂等操作的唯一标识，使用spring el表达式 用#来引用方法参数
	 * @return Spring-EL expression
	 */
	String key() default "";

	/**
	 * 有效期 默认：120
	 * 有效期要大于程序执行时间,否则请求还是可能会进来
	 * @return expireTime
	 */
	int expire() default 120;

	/**
	 * 时间单位 默认：s
	 * @return TimeUnit
	 */
	TimeUnit timeUnit() default TimeUnit.SECONDS;

	/**
	 * 使用spel方式生成key
	 * @return 是否采用spel模式
	 */
	boolean spel() default false;

	/**
	 * 幂等消息提示,可自定义
	 * @return String
	 */
	String message() default "请求处理中,请稍后重试!";

	/**
	 * 是否在业务完成后删除幂等key
	 * true:删除 false:不删除
	 * @return boolean
	 */
	boolean remove() default true;

}
